﻿// FixUnit.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//

#include <iostream>
#include <format>
#include "LengthDefine.h"    

//using 
//const LengthMM width = 11.3; compile err
const LengthUM width = 110.35um;
const LengthPix hight = 1303pix ;

int main()
{
    std::cout << std::format("Hight {0}, Width {1:.2f}, width to pix value {2}", 
                             hight.value(), width.value(), toPixUnit(width).value()) << std::endl;

    LengthUM minutRes = width - LengthUM{ 65.33um };
    LengthPix plusRes = hight + LengthPix{ 212pix };
    LengthPix crossComput = hight + width;
    std::cout << std::format("Compute result: minute {0:.2f}um, plus {1}pix, cross {2}pix", 
                             minutRes.value(), plusRes.value(), crossComput.value()) << std::endl;
    system("pause");

    return 1;
}

//传统接口中int, double等简单类型，没有单位指示，只能进行数值运算，只能靠开发者注释、接口命名时注明、或使用文档进行说明等。
//此方法使用自定义类型替代原有只能指示大小的简单类型，可将单位明示进类型名称中，见名知义，减小沟通成本
//此方法在使用字面值进行赋值时，必须带上"um","pix"等规定好的单位，可避免使用者弄混单位而导致最终的运算结果错误
//自定义类型可对必要的运算进行重载，严格限定运算方式，避免非同类型的简单类型运算时的隐式转换，提高运算结果可信度。并且在长度单位和像素单位之前进行混合运算时，可提前设定好运算方式，避免了传统的混合运算时，每次都要进行单位转换的步骤，提高开发效率，减小犯错机率。

/*
此方法与传统直接设置类类型相比，在操作符重载及交叉运算时，有时显优势，只需根据



*/
